<?php
class CStringHelper {
    public static function summarize($str, $length) {
        if (!isset($str) || is_null($str) || $str == '') return '';
        $str = trim($str);
        $count = strlen($str);
        $numOfChar = 0;
        $result = '';
        $numOfChar = ($length > $count ? $count : $length);
                
        while (isset($str[$numOfChar]) && $str[$numOfChar] !== ' ') {
            --$numOfChar;            
        }
        
        for ($i = 0;$i < $numOfChar;$i++) {
            $result .= $str[$i];    
        }
        
        return $result . "...";
    }
    
    public static function summarizeHtmlEscape($str, $length) {
        $str = trim($str);
        $count = strlen($str);
        $numOfChar = 0;
        $result = '';
        $numOfChar = $length;
                
        while ($numOfChar < $count && $str[$numOfChar] !== ' ') {
            ++$numOfChar;            
        }
        
        $index = $numOfChar;
        
        while (CStringHelper::hasEndTag($str, $index, $count - 1)) {
            $index = strpos($str, '</', $index);
            $index += 2;
        }
        
        for ($i = 0;$i < $index;$i++) {
            $result .= $str[$i];    
        }
        
        return $result . "...";        
    }
    
    public static function hasEndTag($str, $start, $end) {
        $pos = strpos($str, '<', $start);
        if ($str[$pos + 1] !== '/') return FALSE;
        return ($pos < $end);
    }
    
    /**
     * Cắt lấy đoạn cuối của xâu kí tự đầu vào kể từ chuỗi con cho trước
     * @param string $haystack chuỗi kí tự cần cắt
     * @param string $needle chuỗi con
     * @return string chuỗi kí tự cắt được
     */
    public static function strCutOff($haystack, $needle) {
        $haystack = strstr($haystack, $needle);
        return substr($haystack, strlen($needle));    
    }
    
    public static function ultimateEscape($str) {
        $str = CHtml::encode($str);
        $str = str_replace(' ', '%20', $str);
        return $str;
    }
}
?>